package com.resifind.www.dao;

import com.resifind.www.po.Room;
import com.resifind.www.po.RoomNumber;

import java.sql.Connection;
import java.util.List;

/**
 * @author 36069
 */
public interface RoomDao {

    /**
     * 根据房型id查询房型信息
     *
     * @param roomId 房型id
     * @return 返回房型信息
     */
    Room queryRoomByRoomId(int roomId);

    /**
     * 根据商家id查询商家房型信息
     *
     * @param merchantId 商家id
     * @return 返回商家房型信息
     */
    List<Room> queryRoomByMerchantId(int merchantId);

    /**
     * 根据房型id删除房型信息
     *
     * @param roomId 房型id
     * @param conn   数据库连接
     * @return 返回删除结果
     */
    boolean deleteRoom(int roomId, Connection conn);

    /**
     * 根据商家id和房型对象添加房型
     *
     * @param merchantId 商家id
     * @param room       房型对象
     * @param conn       数据库连接
     * @return 返回添加结果
     */
    boolean addRoom(int merchantId, Room room, Connection conn);

    /**
     * 根据房型对象修改房型信息
     *
     * @param room 房型对象
     * @param conn 数据库连接
     * @return 返回修改结果
     */
    boolean updateRoom(Room room, Connection conn);

    /**
     * 更改房型销量和剩余数量，增加或减少
     *
     * @param roomId 房型id
     * @param num    增加或减少的数量
     * @param conn   数据库连接
     * @return 返回修改结果
     */
    boolean updateRoomSalesAndSurplus(int roomId, int num, Connection conn);

    /**
     * 根据房型id查询房间号
     *
     * @param roomId 房型id
     * @return 返回房间号集合
     */
    List<RoomNumber> queryRoomNumberByRoomId(int roomId);

    /**
     * 根据房型id查询可用房间数量
     *
     * @param roomId 房型id
     * @return 返回可用房间数量
     */
    int queryAvailableRoomNumberByRoomId(int roomId);

    /**
     * 根据房型id和可用房间数量更新房型剩余数量
     *
     * @param roomId 房型id
     * @param num    可用房间数量
     * @param conn   数据库连接
     * @return 返回更新结果
     */
    boolean updateRoomSurplusByRoomIdAndNum(int roomId, int num, Connection conn);

    /**
     * 根据房型id和房间号字符串添加房间号
     *
     * @param roomId  房型id
     * @param numbers 房间号字符串数组
     * @param conn    数据库连接
     * @return 返回添加结果
     */
    boolean addRoomNumbers(int roomId, String numbers, Connection conn);

    /**
     * 根据房间号id查询房间号
     *
     * @param roomNumberId 房间号id
     * @return 返回房间号
     */
    RoomNumber queryRoomNumberByRoomNumberId(int roomNumberId);

    /**
     * 根据房间号id删除房间号
     *
     * @param roomNumberId 房间号id
     * @param conn         数据库连接
     * @return 返回删除结果
     */
    boolean deleteRoomNumber(int roomNumberId, Connection conn);

    /**
     * 根据房型id删除房间号
     *
     * @param roomId 房型id
     * @param conn   数据库连接
     * @return 返回删除结果
     */
    boolean deleteRoomNumberByRoomId(int roomId, Connection conn);

    /**
     * 根据房间号id修改房间号状态
     *
     * @param roomNumberId 房间号id
     * @param status       房间号状态
     * @param conn         数据库连接
     * @return 返回修改结果
     */
    boolean updateRoomNumberStatus(int roomNumberId, String status, Connection conn);
}
